From 8a45cb576264565f5dbe991cb9b77cafb3919999 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Fri, 24 May 2013 15:07:16 +0200 Subject: [PATCH] GtkHeaderBar: Make labels creation available privately So it can be reused in subclasses https://bugzilla.gnome.org/show_bug.cgi?id=701345 --- gtk/Makefile.am | 1 + gtk/gtkheaderbar.c | 61 +++++++++++++++++++++++++++------------ gtk/gtkheaderbarprivate.h | 28 ++++++++++++++++++ 3 files changed, 72 insertions(+), 18 deletions(-) create mode 100644 gtk/gtkheaderbarprivate.h diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 0b3de0ab6b..f5fc3d1a69 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -484,6 +484,7 @@ gtk_private_h_sources = \ gtkfilesystemmodel.h \ gtkfontchooserprivate.h \ gtkfontchooserutils.h \ + gtkheaderbarprivate.h \ gtkhslaprivate.h \ gtkiconcache.h \ gtkiconhelperprivate.h \ diff --git a/gtk/gtkheaderbar.c b/gtk/gtkheaderbar.c index b15fd0b1c3..d08fbc6114 100644 --- a/gtk/gtkheaderbar.c +++ b/gtk/gtkheaderbar.c @@ -20,6 +20,7 @@ #include "config.h" #include "gtkheaderbar.h" +#include "gtkheaderbarprivate.h" #include "gtkintl.h" #include "gtkprivate.h" #include "gtktypebuiltins.h" @@ -162,6 +163,44 @@ init_sizing_box (GtkHeaderBar *bar) gtk_widget_show_all (priv->label_sizing_box); } +GtkWidget * +_gtk_header_bar_create_title_box (const char *title, + const char *subtitle, + GtkWidget **ret_title_label, + GtkWidget **ret_subtitle_label) +{ + GtkWidget *label_box; + GtkWidget *title_label; + GtkWidget *subtitle_label; + + label_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_widget_set_valign (label_box, GTK_ALIGN_CENTER); + gtk_widget_show (label_box); + + title_label = gtk_label_new (title); + boldify_label (title_label); + gtk_label_set_line_wrap (GTK_LABEL (title_label), FALSE); + gtk_label_set_single_line_mode (GTK_LABEL (title_label), TRUE); + gtk_label_set_ellipsize (GTK_LABEL (title_label), PANGO_ELLIPSIZE_END); + gtk_box_pack_start (GTK_BOX (label_box), title_label, FALSE, FALSE, 0); + gtk_widget_show (title_label); + + subtitle_label = gtk_label_new (subtitle); + smallify_label (subtitle_label); + gtk_label_set_line_wrap (GTK_LABEL (subtitle_label), FALSE); + gtk_label_set_single_line_mode (GTK_LABEL (subtitle_label), TRUE); + gtk_label_set_ellipsize (GTK_LABEL (subtitle_label), PANGO_ELLIPSIZE_END); + gtk_box_pack_start (GTK_BOX (label_box), subtitle_label, FALSE, FALSE, 0); + gtk_widget_set_no_show_all (subtitle_label, TRUE); + + if (ret_title_label) + *ret_title_label = title_label; + if (ret_subtitle_label) + *ret_subtitle_label = subtitle_label; + + return label_box; +} + static void construct_label_box (GtkHeaderBar *bar) { @@ -169,25 +208,11 @@ construct_label_box (GtkHeaderBar *bar) g_assert (priv->label_box == NULL); - priv->label_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + priv->label_box = _gtk_header_bar_create_title_box (priv->title, + priv->subtitle, + &priv->title_label, + &priv->subtitle_label); gtk_widget_set_parent (priv->label_box, GTK_WIDGET (bar)); - gtk_widget_set_valign (priv->label_box, GTK_ALIGN_CENTER); - gtk_widget_show (priv->label_box); - - priv->title_label = gtk_label_new (priv->title); - boldify_label (priv->title_label); - gtk_label_set_line_wrap (GTK_LABEL (priv->title_label), FALSE); - gtk_label_set_single_line_mode (GTK_LABEL (priv->title_label), TRUE); - gtk_label_set_ellipsize (GTK_LABEL (priv->title_label), PANGO_ELLIPSIZE_END); - gtk_box_pack_start (GTK_BOX (priv->label_box), priv->title_label, FALSE, FALSE, 0); - gtk_widget_show (priv->title_label); - - priv->subtitle_label = gtk_label_new (priv->subtitle); - smallify_label (priv->subtitle_label); - gtk_label_set_line_wrap (GTK_LABEL (priv->subtitle_label), FALSE); - gtk_label_set_single_line_mode (GTK_LABEL (priv->subtitle_label), TRUE); - gtk_label_set_ellipsize (GTK_LABEL (priv->subtitle_label), PANGO_ELLIPSIZE_END); - gtk_box_pack_start (GTK_BOX (priv->label_box), priv->subtitle_label, FALSE, FALSE, 0); } static void diff --git a/gtk/gtkheaderbarprivate.h b/gtk/gtkheaderbarprivate.h new file mode 100644 index 0000000000..bd751663eb --- /dev/null +++ b/gtk/gtkheaderbarprivate.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2013 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __GTK_HEADER_BAR_PRIVATE_H__ +#define __GTK_HEADER_BAR_PRIVATE_H__ + +GtkWidget * _gtk_header_bar_create_title_box (const char *title, + const char *subtitle, + GtkWidget **ret_title_label, + GtkWidget **ret_subtitle_label); + +#endif /* __GTK_HEADER_BAR_PRIVATE_H__ */ -- 2.30.2